package com.service.impl;

import com.cloopen.rest.sdk.CCPRestSmsSDK;
import com.conf.SmsConfig;
import com.exception.SmsSendException;
import com.service.SmsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

@Service
public class SmsServiceImpl implements SmsService {

    @Autowired
    private SmsConfig smsConfig;

    @Override
    public void sendMessage(String phoneNumber, String code, String time) throws SmsSendException {

        //初始化SDK
        CCPRestSmsSDK restAPI = new CCPRestSmsSDK();

        //初始化服务器地址和端口
        //参数顺序: 第1参数:server ip, 第2参数:server port
        restAPI.init(smsConfig.getSmsServerIP(), smsConfig.getSmsServerPort());

        //初始化主帐号和主帐号令牌
        //参数顺序: 第1参数:acount sid，第2参数:auth token
        restAPI.setAccount(smsConfig.getSmsAccountSid(), smsConfig.getSmsAuthToken());

        //初始化应用ID
        restAPI.setAppId(smsConfig.getSmsAppID());

        //调用发送模板短信的接口发送短信
        //参数顺序说明:
        //  第1参数:是要发送的手机号码，可以用逗号分隔，一次最多支持100个手机号
        //  第2参数:是模板ID，在平台上创建的短信模板的ID值；测试的时候可以使用系统的默认模板，id为1
        //      系统默认模板的内容为“【云通讯】您使用的是云通讯短信模板，您的验证码是{1}，请于{2}分钟内正确输入”
        //  第3参数是要替换的内容数组。																														       *

        //举例说明:
        //  假设您使用默认模板ID 1，发送手机号是13800000000，传入参数为6532和5，则调用方式为:
        //      result = restAPI.sendTemplateSMS("13800000000","1" ,new String[]{"6532","5"});																		  *
        //  调用后13800000000手机号收到的短信内容是：【云通讯】您使用的是云通讯短信模板，您的验证码是6532，请于5分钟内正确输入
        Map<String, Object> result = restAPI.sendTemplateSMS(phoneNumber, "1", new String[]{code, time});

        System.out.println("SDKTestGetSubAccounts result=" + result);

        if("000000".equals(result.get("statusCode"))){
            //正常返回输出data包体信息（map）
            Map<String,Object> data = (HashMap<String, Object>) result.get("data");
            Set<String> keySet = data.keySet();
            for(String key : keySet){
                Object object = data.get(key);
                System.out.println(key +" = "+object);
            }
        }else{
            //异常返回输出错误码和错误信息
            System.out.println("错误码=" + result.get("statusCode") +" 错误信息= "+result.get("statusMsg"));
            throw new SmsSendException("错误码=" + result.get("statusCode") +" 错误信息= "+result.get("statusMsg"));
        }
    }
}
